package com.ddwl.common.feign.api;


import com.ddwl.schema.bo.base.PageBo;
import com.ddwl.schema.bo.distr.ComputeProfitPriceBo;
import com.ddwl.schema.bo.goods.*;
import com.ddwl.schema.bo.order.ChangeStockBo;
import com.ddwl.schema.bo.order.LockStockBo;
import com.ddwl.schema.bo.order.QuerySkuPriceBo;
import com.ddwl.schema.vo.base.PageVo;
import com.ddwl.schema.vo.base.RestVo;
import com.ddwl.schema.vo.dist.ComputeProfitPriceVo;
import com.ddwl.schema.vo.goods.*;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * @author Admin
 */
@FeignClient(name = "ddwl-goods", path = "/goods")
public interface GoodsApi {

    /**
     * 获取商品详情
     *
     * @param id
     * @return
     */
    @GetMapping("/item/get")
    RestVo<ItemVo> getItemInfo(@RequestParam("id") String id);

    /**
     * 获取类目详情
     *
     * @param id
     * @return
     */
    @GetMapping("/category/detail")
    RestVo<CategoryVo> getCategoryDetail(@RequestParam("id") String id);


    /**
     * 变更商品库存
     */
    @PostMapping("/sku/changeStock")
    RestVo changeStock(@RequestBody ChangeStockBo changeStockBo);

    /**
     * 变更销量
     */
    @PostMapping("/sku/changeSales")
    RestVo changeSales(@RequestBody ChangeStockBo changeStockBo);

    /**
     * 锁定商品库存
     */
    @PostMapping("/sku/lockStock")
    RestVo lockStock(@RequestBody LockStockBo lockStockBo);

    /**
     * 校验锁定商品库存
     */
    @PostMapping("/sku/checkLockStock")
    RestVo checkLockStock(@RequestBody LockStockBo lockStockBo);

    /**
     * 获取商品详情
     *
     * @param id
     * @return
     */
    @GetMapping("/item/detail")
    RestVo<ItemDetailVo> detail(@RequestParam("id") String id);

    /**
     * 移除用户购物车商品
     *
     * @param skuCodes
     * @param userId
     * @return
     */
    @DeleteMapping("/shoppingCard/{userId}")
    RestVo deleteShoppingCard(@RequestParam("skuCodes") List<String> skuCodes, @PathVariable("userId") String userId);

    /**
     * 查询商品价格
     *
     * @param querySkuPriceBo
     * @return
     */
    @PostMapping(path = "/sku/querySkuPrice")
    RestVo<List<SkuBestPriceVo>> querySkuPrice(@RequestBody QuerySkuPriceBo querySkuPriceBo);

    /**
     * 获取商品分消利润
     *
     * @param itemBos
     * @return
     */
    @PostMapping("/profit/profitPrice")
    RestVo<List<ComputeProfitPriceVo>> computeProfitPrice(@RequestBody List<ComputeProfitPriceBo> itemBos);

    /**
     * 子商品列表查询
     *
     * @param pageBo
     * @return
     */
    @PostMapping("/ddwlOpenApi/itemlist")
    RestVo<PageVo<SkuVo>> index(@RequestBody PageBo<ItemListApiBo> pageBo);

    /**
     * 子商品列表
     *
     * @return
     */
    @GetMapping("/sku/detailNew")
    RestVo<SkuVo> detailNew(@ApiParam(value = "子商品ID", required = true) @RequestParam String barcode);

    /**
     * 主商品列表查询
     *
     * @param pageBo
     * @return
     */
    @PostMapping("/ddwlOpenApi/mainItemlist")
    RestVo<PageVo<ItemApiVo>> mainiItemlist(@RequestBody PageBo<ItemListApiBo> pageBo);

    /**
     * 同步库存数量
     *
     * @param bo
     * @return
     */
    @PostMapping("/ddwlOpenApi/updateRealStock")
    RestVo updateRealStock(@RequestBody PageBo<ItemListApiBo> bo);

    /**
     * 供应商列表
     *
     * @param bo
     * @return
     */
    @PostMapping("/supplier/querySupplierCategory")
    RestVo<PageVo<SupplierVo>> querySupplierCategory(@RequestBody SupplierBo bo);

    /**
     * 创建供应商
     */
    @PostMapping("/supplier/create")
    RestVo<String> create(@Valid @RequestBody SupplierBo bo);

    /**
     * 商品分类列表
     */
    @PostMapping("/category/page")
    RestVo<PageVo<CategoryVo>> page(@Valid @RequestBody PageBo<CategorySearchBo> pageBo);

    @PostMapping("/category/tree")
    RestVo<PageVo<CategoryVo>> tree(@Valid @RequestBody CategorySearchBo bo);

    /**
     * 分页查询所有商品
     *
     * @return
     */
    @PostMapping("/item/queryAll")
    RestVo<PageVo<ItemVo>> queryItemAll(@RequestBody PageBo bo);

    /**
     * 商品标签操作（支持修改）
     *
     * @return
     */
    @PostMapping("/item/itemSginOperate")
    RestVo itemSginOperate(@RequestBody ItemSginBo itemSginBo);

    /**
     * 商品包括sku数量
     *
     * @return
     */
    @PostMapping("/item/querySkuWithItemCount")
    RestVo<Integer> querySkuWithItemCount(@RequestBody ItemListBo bo);

    /**
     * 查询商学院文章待审核数量
     *
     * @return
     */
    @PostMapping("/Academy/academyUnApproveList")
    RestVo<Integer> academyUnApproveList(@RequestBody QueryAcademyBo pageBo);

    /**
     * 店铺审核通过新增默认商品分类
     *
     * @param bo
     * @return
     */
    @PostMapping("/shopItemCategory/addDefaultCategoryForApi")
    RestVo addDefaultCategoryForApi(@Valid @RequestBody ShopItemDefaultCategoryBo bo);

    /**
     * 根据商品编码查询
     *
     * @param barcodes
     * @return
     */
    @PostMapping("/sku/querySkuByBacodes")
    RestVo<List<SkuVo>> querySkuByBacodes(@RequestBody List<String> barcodes);

    /**
     * 商品评价
     *
     * @param itemRateBoList
     * @return
     */
    @PostMapping("/itemRate")
    RestVo itemRate(@RequestBody List<ItemRateBo> itemRateBoList);

    /**
     * 店铺代理商品详情
     *
     * @param itemId
     * @param shopId
     * @return
     */
    @GetMapping("item/agent/info")
    RestVo<ItemAgentVo> agentInfo(@RequestParam String itemId, @RequestParam String shopId);

    /**
     * 代理商品的店铺id列表
     */
    @GetMapping("item/agent/shopIdList")
    RestVo<List<String>> agentShopIds(@RequestParam String itemId);

    /**
     * 查询商品
     *
     * @param itemIds
     * @return
     */
    @PostMapping("item/queryItems")
    RestVo<List<ItemVo>> queryItems(@RequestBody Collection<String> itemIds);

    /**
     * 查询商品下所有skuId
     *
     * @param itemIds
     * @return
     */
    @PostMapping("/skuIds")
    RestVo<List<String>> querySkuIds(@RequestBody Collection<String> itemIds);
}
